package shop;
import main.ThreadsGui;
import scheduler.Client;
import scheduler.Scheduler;
public class Shop implements Runnable {
int finishTime;
int maxProcessingTime;
int minProcessingTime;
int openCounters;
private Scheduler scheduler;
private ThreadsGui gui;
public Shop(int finishTime, int maxProcessingTime, int minProcessingTime, int openCounters) {
this.finishTime = finishTime;
this.maxProcessingTime = maxProcessingTime;
this.minProcessingTime = minProcessingTime;
this.openCounters = openCounters;
scheduler = new Scheduler();
for (int i = 0; i < openCounters; i++) {
Counter counter = new Counter(i);
scheduler.addCounter(counter);
}
gui = new ThreadsGui(openCounters, scheduler, this);
}
@Override
public void run() {
int currentTime = 0;
while (currentTime < finishTime) {
currentTime++;
int processingTime = (int) (Math.random() * (maxProcessingTime - minProcessingTime) * 2);
int arrivalTime = (int) (currentTime + Math.random() * 3);
Client client = new Client(arrivalTime, processingTime);
scheduler.sendClientToCounter(client, arrivalTime);
scheduler.serveClients();
gui.displayData(scheduler.getCounters());
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Stopped");
scheduler.stopCounters();
gui.displayConclusions();
}
public float[] getAverageWaitingTimes() {
float[] averageTimes = new float[openCounters];
int i = 0;
for (Counter c : scheduler.getCounters()) {
averageTimes[i] = c.getAverageWaitingTime();
i++;
}
return averageTimes;
}
public float[] getAverageServingTimes() {
float[] averageTimes = new float[openCounters];
int i = 0;
for (Counter c : scheduler.getCounters()) {
averageTimes[i] = c.getAverageServingTime();
i++;
}
return averageTimes;
}
}